using System;
using System.Collections.Generic;
using System.Text;

using RRHH.Competencias.Entities;
using RRHH.Competencias.DataAccessLayer;
using RRHH.Competencias.DataAccessLayer.Generic;

namespace RRHH.Competencias.Controladores
{
    public class GestorEnumerador<T> where T : ObjetoABM, new()
    {
        private IDALEnumerador<T> persistencia;
        private List<T> enumeracion;

        public GestorEnumerador()
        {
            persistencia = DALProvider.GetDALEnumerador<T>();
            enumeracion = persistencia.BuscarTodos();
        }
        /// <summary>
        /// Devuelve un lista de item enumerados
        /// </summary>
        public List<T> Enumeracion
        {
            get { return enumeracion; }
        }

        /// <summary>
        /// Devuelve el item ubicado en la posicion "indice"
        /// en caso de error devuelve null.
        /// </summary>
        /// <param name="indice"></param>
        /// <returns></returns>
        public T GetItem(int indice)
        {
            try
            {
                return enumeracion[indice];
            }
            catch
            {
                return null;
            }
        }

        /// <summary>
        /// Devuelve el item cuyo id coincida con el parametro.
        /// en caso de error devuelve null.
        /// </summary>
        /// <param name="indice"></param>
        /// <returns></returns>
        public T GetItem(long indice)
        {
            try
            {
                T tItem = null;
                foreach (T item in enumeracion)
                {
                    if (item.Id == indice)
                    {
                        tItem = item;
                        break;
                    }
                }
                return tItem;
            }
            catch
            {
                return null;
            }
        }

        /// <summary>
        /// Devuelve el item cuyo nombre coincida con el parametro.
        /// en caso de error devuelve null.
        /// </summary>
        /// <param name="indice"></param>
        /// <returns></returns>
        public T GetItem(string indice)
        {
            try
            {
                T tItem = null;
                foreach (T item in enumeracion)
                {
                    if (item.Nombre == indice)
                    {
                        tItem = item;
                        break;
                    }
                }
                return tItem;
            }
            catch
            {
                return null;
            }
        }
    }
}
